package com.ming_za.odupdaterserver.api;

import com.ming_za.odupdaterserver.core.service.ReturnBusinessPackage;
import com.ming_za.odupdaterserver.core.sqlite.domain.Label;

import java.util.List;
import java.util.Map;

/**
 * 标签管理器
 * <p>使用二进制位进行存储，提高检索效率，以long类型进行存储，最多可存在63个标签</p>
 * <p>负责存储，检索标签</p>
 */
public interface LabelManager {

    /**
     * 获取标签复合二进制位，融合父级关系
     * @param labelId 标签id
     * @return 存在返回标签二进制位（父级与子级合并返回），否则返回-1
     */
    long getLabelCompoundBit(Long labelId);

    /**
     * 获取所有标签数据
     */
    Map<Long, Label> getLabels();

    /**
     * 获取传入标签的所有子级
     * @param label 独立标签数据
     */
    ReturnBusinessPackage<List<Label>> getLabelSons(long label);

    /**
     * 新增标签
     * @param name 标签名称
     * @param parent 标签父级，可为null
     * @return 添加成功返回标签id
     */
    Long addLabel(String name,Long parent);

    /**
     * 删除标签
     * @param labelId 标签id
     */
    void delLabel(Long labelId);

    /**
     * 设置标签父级
     * @param labelId 标签id
     * @param parent 父级
     */
    ReturnBusinessPackage<Void> setLabelParent(long labelId, long parent);

    /**
     * 获取标签详细数据
     * @param labelId 标签id
     */
    Label getLabel(long labelId);

    /**
     * 获取所有继承复合标签
     * @param labels 标签
     * @return 所有继承与父级合并的标签值
     */
    Long getAllExtendsLabel(long labels);

}
